package org.example.myleet.p1252;

public class Solution {
    public int oddCells(int m, int n, int[][] indices) {
        //纵向+1，列
        int[] vertical = new int[n];
        //横向+1，行
        int[] horizontal = new int[m];
        for (int[] index : indices) {
            //记录发生增量操作的行位置和列位置，对应位置的增量操作+1
            ++horizontal[index[0]];
            ++vertical[index[1]];
        }
        //总数是奇数的格子总数
        int sumOfOdd = 0;
        //发生增量操作为奇数的行数目
        int rowCount = 0;
        for (int i = 0; i < m; ++i) {
            if ((horizontal[i] & 1) == 1) {
                //当该行的增量操作为奇数时，对应的行的格子结果是奇数，每行涉及到n个格子
                sumOfOdd += n;
                //找到增量操作为奇数的行
                ++rowCount;
            }
        }
        for (int j = 0; j < n; ++j) {
            if ((vertical[j] & 1) == 1) {
                //当该列的增量操作为奇数时，对应的列的格子结果是奇数，每列涉及到m个格子
                sumOfOdd += m;
                //但是列和行的交汇点需要减两次，一次是行和列重复计算需要排除一次，另一次是因为交汇点由于奇数相加变成偶数，需要再排除一次
                sumOfOdd -= rowCount * 2;
            }
        }
        return sumOfOdd;
    }
}
